package com.cn.wanxi.service.impl;

import com.cn.wanxi.dao.CompanyDao;
import com.cn.wanxi.dao.NavDao;
import com.cn.wanxi.dao.impl.CompanyImpl;
import com.cn.wanxi.dao.impl.NavImpl;
import com.cn.wanxi.dto.CommonModelDto;
import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.service.ICommonService;
import com.cn.wanxi.service.ICompanyService;
import redis.clients.jedis.Jedis;

import java.util.List;

public class CommonServiceImpl implements ICommonService {
    /**
     * 封装公共信息
     * @return
     */
    @Override
    public CommonModelDto getCommonDtoModel() {
        CommonModelDto commonModelDto = new CommonModelDto();
        commonModelDto.setCompanyModel(getCompanyModel());//设置公司信息
        commonModelDto.setNavModelList(getNavModelList());//设置导航信息

        return commonModelDto;
    }

    /**
     * 得到公司信息
     * 服务逻辑层需要调用数据接口dao层
     * 数据接口层需要数据实现层去实现
     *
     * @return
     */
    private CompanyModel getCompanyModel() {
        CompanyDao companyDao = new CompanyImpl();
        /**
         * redis   数据类型：String  list  set
         *  我们需要将CompanyModel对象从缓存中提取
         *  1.如果缓存中有则从缓存中提取
         *  2.如果没有则查询数据库
         */
        Jedis jedis = new Jedis();
        CompanyModel companyModel = new CompanyModel();
        boolean aBoolean = jedis.exists("companyAd");//查看我们这一个company值是否存在，如果不存在则返回false
        companyModel = companyDao.getCompanyModel();
//        if (aBoolean) {
//            //从缓存中得到的值
//            companyModel.setAd(jedis.get("companyAd"));
//            companyModel.setAddress(jedis.get("companyAddress"));
//        } else {
//            synchronized (this) {
//                /**
//                 * 为什么要锁？
//                 *  1.读取数据库的时候只能一个一个来读取
//                 *  2.如果不要锁，则会出现同时多人读取数据库的情况
//                 */
//                //从数据库里面查询出来的值
//                companyModel = companyDao.getCompanyModel();
//                //将查询出来的 值存储到redis里面，并设定一个过期时间。
//                //或者我们可以固定一个时间去修改缓存值，比如晚上人少的情况下
//                jedis.set("companyAd", companyModel.getAd());
//                jedis.expire("companyAd", 60 * 60 * 24);
//                jedis.set("companyAddress", companyModel.getAddress());
//                jedis.expire("companyAddress", 60 * 60 * 24);
//            }
//
//        }
        return companyModel;
    }

    /**
     * 得到导航信息
     * @return
     */
    private List<NavModel> getNavModelList() {
        NavDao navDao = new NavImpl();
        return navDao.getNavModelList();

    }
}
